/****************************************************************************
                Университет:    Санкт-Петербургский Политехнический Университет
                Кафедра:        Компьютерные системы и программные технологии
                Аспирант:       Быков Илья Иванович
                Программа:      Расчет коэффициентов распределения
                Модуль:         setcolornodecommand.cpp
                Назначение:
****************************************************************************/

#include "setnodecolorcommand.h"
#include "node.h"
#include "document.h"

/******************************************************************************
** SetNodeColorCommand
*/

SetNodeColorCommand::SetNodeColorCommand(Document *doc, QList<Node*> nodeList, const QColor &color, QUndoCommand *parent)
    : Command(ResizeNodeCommandId, doc, parent)
    , m_nodeList(nodeList)
    , m_newColor(color)
{
    foreach (Node *node, m_nodeList) {
        m_oldColorList << node->color();
    }
    if(m_nodeList.size() == 1) {
        setText(QString("Изменен цвет узла № %1").arg(QString::number(m_nodeList[0]->number())));
    } 
    else {
        setText(QString("Изменен цвет группы узлов"));
    }
}

void SetNodeColorCommand::undo()
{
    for (int i = 0; i < m_nodeList.size(); i++) {
        m_nodeList[i]->setColor(m_oldColorList[i]);
    }
}

void SetNodeColorCommand::redo()
{
    for (int i = 0; i < m_nodeList.size(); i++) {
        m_nodeList[i]->setColor(m_newColor);
    }
}

bool SetNodeColorCommand::mergeWith(const QUndoCommand *command)
{
    if (command->id() != id())
        return false;

    const SetNodeColorCommand *other = static_cast<const SetNodeColorCommand*>(command);
    if (m_nodeList != other->m_nodeList)
        return false;

    m_newColor = other->m_newColor;
    return true;
}
